// 引入CryptoJS库
import AES from 'crypto-js/aes';
import CryptoJS from 'crypto-js';

/**
 * 加密函数（对应Java后端AES256Coder.encrypt方法）
 * 使用 AES/ECB/PKCS5Padding 模式
 * @param {String} data - 要加密的数据
 * @param {String} key - 16进制字符串格式的密钥（对应Java后端HexUtils.hexStr2ByteArray）
 * @returns {String} - 16进制字符串格式的加密结果（对应Java后端HexUtils.byteArray2HexStr）
 */
function encrypt(data, key) {
    // 将16进制字符串密钥转换为WordArray（对应Java后端HexUtils.hexStr2ByteArray）
    const keyHex = CryptoJS.enc.Hex.parse(key);
    // 将数据转换为UTF-8字节（对应Java后端data.getBytes("UTF-8")）
    const dataUtf8 = CryptoJS.enc.Utf8.parse(data);
    // 使用AES加密，模式ECB（对应Java后端AES/ECB/PKCS5Padding），填充PKCS7（PKCS5在AES中等同于PKCS7）
    // ECB模式不需要IV
    const encrypted = AES.encrypt(dataUtf8, keyHex, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    // 将加密结果转为16进制字符串（对应Java后端HexUtils.byteArray2HexStr）
    return encrypted.ciphertext.toString(CryptoJS.enc.Hex);
}

/**
 * 解密函数（对应Java后端AES256Coder.decrypt方法）
 * 使用 AES/ECB/PKCS5Padding 模式
 * @param {String} encryptedData - 16进制字符串格式的加密数据
 * @param {String} key - 16进制字符串格式的密钥（对应Java后端HexUtils.hexStr2ByteArray）
 * @returns {String} - UTF-8格式的解密结果
 */
function decrypt(encryptedData, key) {
    // 将16进制字符串密钥转换为WordArray（对应Java后端HexUtils.hexStr2ByteArray）
    const keyHex = CryptoJS.enc.Hex.parse(key);
    // 将16进制字符串密文转换为CipherParams对象（对应Java后端HexUtils.hexStr2ByteArray）
    const cipherParams = CryptoJS.lib.CipherParams.create({
        ciphertext: CryptoJS.enc.Hex.parse(encryptedData)
    });
    // 使用AES解密，模式ECB（CS7）
    // ECB模式不需要IV
    const decrypted = AES.decrypt(cipherParams, keyHex, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    // 将解密结果转为UTF-8字符串
    return decrypted.toString(CryptoJS.enc.Utf8);
}

export { encrypt, decrypt }
// 示例
// const key = '1234567890123456'; // 16字节密钥
// const data = 'Hello, AES!';
// const encryptedData = encrypt(data, key);
// console.log('加密后:', encryptedData);
// const decryptedData = decrypt(encryptedData, key);
// console.log('解密后:', decryptedData);